home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
cdck106
/
cdck106.bas
next >
Wrap
BASIC Source File
|
1993-07-08
|
12KB
|
278 lines
10 '***********************************
20 '* CDCHECK.BAS Copyright A.Okuyama *
30 '* CD-DA表面検査プログラム *
40 '* 1992. 3.16 Ver 1.05 1992. 6. 2 *
50 '***********************************
60 DIM CDI%(5),CDS%(8)
70 DIM TSSEC(200),TRKTIME$(200),ETRCOLOR(200),DVSTFLM(200)
80 START=0
90 CONSOLE 0,25,0:SCREEN@ 0:VIEW (0,0)-(639,479)
100 PALETTE 0,[16* 3,16* 0,16* 1]:'***** バック・グラウンドの緑色
110 PALETTE 1,[16* 4,16* 1,16* 2]:'***** 縁の緑色
120 PALETTE 2,[16* 5,16* 2,16* 3]:'***** 最大記録領域の緑色
130 PALETTE 3,[16* 5,16* 5,16* 5]:'***** 濃い灰色
140 PALETTE 4,[16* 1,16* 3,16* 3]:'***** 薄紫
150 PALETTE 5,[16* 0,16* 5,16* 5]:'***** 紫
160 PALETTE 6,[16* 6,16* 6,16* 6]:'***** 薄い灰色
170 PALETTE 7,[16* 0,16* 0,16* 5]:'***** 青(データ・トラック)
180 PALETTE 8,[16* 7,16* 0,16* 7]:'***** 水(検査中のトラック)
190 PALETTE 13,[16* 0,16* 0,16*11]:'*****
200 PALETTE 14,[16* 0,16* 6,16* 6]:'*****
210 PALETTE 15,[16* 0,16*11,16* 0]:'*****
220 MOUSE 0:MOUSE 1,,,0
230 *MAIN:'*****************************
240 ON ERROR GOTO *ERRLOOP
250 PMTIME$="24:00:00"
260 FOR C=0 TO 200:TSSEC(C)=0:TRKTIME$(C)="":ETRCOLOR(C)=0:NEXT C
270 COLOR 0,%0,%0:CLS
280 LINE (0,19)-(639,25),PSET,%13,BF,%13
290 LINE (0,26)-(639,29),PSET,%14,BF,%14
300 LINE (0,30)-(639,37),PSET,%15,BF,%15
310 GOSUB *PANEL
320 IF START=0 THEN GOSUB *COMMENT:START=1
330 IF I$=CHR$(&H1B) THEN SYSTEM
340 EP=1
350 CD STOP
360 EP=0
370 GOSUB *INF
380 LPRN=1:ELPRN=0
390 GOSUB *LPRN
400 LPRN=0
410 GOSUB *TRKTIME
420 IF CDI%(1)=2 THEN ETRCOLOR(1)=3:GOSUB *STIME:GOTO *RES
430 GOSUB *STIME
440 GOSUB *START
450 *RES
460 LOCATE 5,3:COLOR 6:PRINT "《 [RETURN][実行]を押すと検査を開始します。[ESC]を押すと終了します。》"
470 GOSUB *PANEL
480 IF MOUSE(2,0)=-1 THEN *MAIN
490 IF MOUSE(2,1)=-1 THEN SYSTEM
500 I$=INKEY$:IF I$="" THEN *RES
510 IF I$=CHR$(27) THEN SYSTEM
520 IF I$=CHR$(13) THEN *MAIN ELSE *RES
530 *PANEL:'****************************
540 IF PMTIME$=TIME$ THEN RETURN
550 PMTIME$=TIME$
560 LOCATE 0,1
570 COLOR 12:PRINT " A.Okuyama Ver 1.06 ";
580 COLOR 14:PRINT " CD-DA 表面検査 プログラム ";
590 COLOR 12:PRINT USING " & & & & ";DATE$;PMTIME$;
600 RETURN
610 *COMMENT:'***** コメント表示 *****
620 FOR C=0 TO 12
630 GOSUB *PANEL
640 PALETTE 10,[16*(3+C),16*C,16*(1+C)]:' ***** コメント色設定 *****
650 GOSUB *COMPRN
660 NEXT C
670 *COMCLS
680 GOSUB *PANEL
690 I$=INKEY$
700 IF I$=CHR$(&H18) OR I$=CHR$(&H1B) OR MOUSE(2,1) THEN I$=CHR$(&H1B):RETURN
710 IF I$="" AND NOT(MOUSE(2,0)) THEN *COMCLS
720 FOR C=12 TO 0 STEP -1
730 GOSUB *PANEL
740 PALETTE 10,[16*(3+C),16*C,16*(1+C)]:' ***** コメント消去 *****
750 COLOR 0:GOSUB *COMPRN
760 NEXT C
770 RETURN
780 *COMPRN:'***** コメント内容 *****
790 SYMBOL (9*27,18*3),"【 使 用 方 法 】",1,1,%10
800 SYMBOL (9*6,18*5),"[実行][RETURN]キー(マウスでは左のボタン)を押すと検査を開始します。",1,1,%10
810 SYMBOL (9*1,18*7),"[ESC]キー(マウスでは右のボタン)を押すと検査をキャンセルし、次の曲に進みます。",1,1,%10
820 SYMBOL (9*25,18*10),"【 使 用 上 の 注 意 】",1,1,%10
830 SYMBOL (9*0,18*12)," (1) CDドライブ側のエラー訂正機構が働くため単発的な雑音は見逃す場合があ",1,1,%10
840 SYMBOL (9*0,18*13)," ります。",1,1,%10
850 SYMBOL (9*0,18*15)," (2) CDドライブ側のバッファの状態によって、対象トラックの直前に傷がある",1,1,%10
860 SYMBOL (9*0,18*16), " 場合などに再生不能と判定する時があります。",1,1,%10
870 SYMBOL (9*0,18*18)," (3) ±1秒を超えるズレの生じない傷は見逃すことがあります。",1,1,%10
880 SYMBOL (9*0,18*20)," (4) データ・トラックは検査しません。",1,1,%10
890 RETURN
900 *INF:'***** CDインフォメーション *****
910 ON ERROR GOTO *ERRLOOP
920 CDINF CDI%
930 TOTALFLM=(CDI%(2)*60+CDI%(3))*75+CDI%(4)
940 COLOR 7:LOCATE 0,0
950 ON CDI%(1) GOSUB *CD_INF1,*CD_INF2,*CD_INF3:GOTO *INFJP1
960 *CD_INF1
970 PRINT "音楽専用CDです。"
980 RETURN
990 *CD_INF2
1000 COLOR 2:PRINT "データ専用CDです。このプログラムでは検査できません。":COLOR 7:ETRCOLOR(1)=3:DVSTFLM(1)=TOTALFLM:GOSUB *CDVIEW
1010 RETURN
1020 *CD_INF3
1030 PRINT "音楽・データ共用CDです。"
1040 RETURN
1050 *INFJP1
1060 IF CDI%(1)=2 THEN *INFJP2
1070 COLOR 5:LOCATE 30,0:PRINT "水色は再生中"
1080 COLOR 1:LOCATE 44,0:PRINT "青色はデータ"
1090 COLOR 3:LOCATE 58,0:PRINT "紫色は再生不能"
1100 *INFJP2
1110 COLOR 7:LOCATE 0,2:PRINT USING "《 全### 曲 ### 分### 秒### フレーム 》";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
1120 'TOTALFLM=(CDI%(2)*60+CDI%(3))*75+CDI%(4)
1130 RETURN
1140 *LPRN:'***** プリント印刷処理 *****
1150 ON ERROR GOTO *ERRLOOP
1160 IF CDI%(1)=2 THEN RETURN
1170 LPRINT DATE$;" ";TIME$;" ";
1180 IF CDI%(1)=1 THEN LPRINT "音楽専用CD " ELSE IF CDI%(1)=3 THEN LPRINT "音楽・データ共用CD "
1190 LPRINT USING "全### 曲 ###分###秒###フレームです。";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
1200 IF ELPRN=0 THEN LOCATE 72,0:COLOR 2:PRINT "〔印刷〕";
1210 RETURN
1220 *TRKTIME:'***** 各トラック先頭までのフレーム総数 *****
1230 FOR C=1 TO CDI%(5)
1240 TSSEC(C)=VAL(LEFT$(CDSTIME$(C),2))*60+INT(VAL(MID$(CDSTIME$(C),4,2))+VAL(RIGHT$(CDSTIME$(C),2))/75+.5!)
1250 TSSEC=VAL(LEFT$(CDSTIME$(C),2))*60+VAL(MID$(CDSTIME$(C),4,2))
1260 IF CDI%(5)<C+1 THEN
1270 TESEC=CDI%(2)*60+CDI%(3)
1280 ELSE
1290 TESEC=VAL(LEFT$(CDSTIME$(C+1),2))*60+VAL(MID$(CDSTIME$(C+1),4,2))
1300 ENDIF
1310 TSFLM=VAL(RIGHT$(CDSTIME$(C),2))
1320 IF CDI%(5)<C+1 THEN
1330 TEFLM=CDI%(4)
1340 ELSE
1350 TEFLM=VAL(RIGHT$(CDSTIME$(C+1),2))
1360 ENDIF
1370 TRACKSEC=INT(TESEC)-INT(TSSEC)+INT((TEFLM-TSFLM)/75)
1380 TRKTIME$(C)=RIGHT$(STR$(100+INT(TRACKSEC/60)),2)+":"+RIGHT$(STR$(100+(TRACKSEC MOD 60)),2)+":"+RIGHT$(STR$(100+(75+TEFLM-TSFLM) MOD 75),2)
1390 DVSTFLM(C-1)=TSSEC(C)*75
1400 NEXT C
1410 DVSTFLM(C-1)=TOTALFLM
1420 RETURN
1430 *STIME:'***** 1~80曲目の時間表示 *****
1440 FOR C=1 TO CDI%(5)
1450 IF 80<C THEN *STJP
1460 IF C=CDS%(5) THEN COLOR 5-ETRCOLOR(C)*2 ELSE COLOR 4-ETRCOLOR(C)
1470 LOCATE 20*INT((C-1)/20),3+C-20*INT((C-1)/20):PRINT USING "### 曲目 ";C;:PRINT TRKTIME$(C)
1480 *STJP
1490 NEXT C
1500 RETURN
1510 *START:'***** 検査開始トラック指定 *****
1520 CKTOTAL=0
1530 IF CDI%(1)=3 THEN STRACK=2:ETRCOLOR(1)=3 ELSE STRACK=1
1540 *ERSTART:'***** 新トラック検査開始 *****
1550 XTIME=0:MTIME=0:CDS%(6)=0:CDS%(7)=0:CDS%(8)=0:ONMIN=0:ONSEC=0:MOUSE 0
1560 CDS%(2)=VAL(LEFT$(CDSTIME$(STRACK),2))
1570 CDS%(3)=VAL(MID$(CDSTIME$(STRACK),4,2))
1580 CDS%(4)=VAL(RIGHT$(CDSTIME$(STRACK),2))
1590 CKMIN=VAL(LEFT$(CDSTIME$(STRACK),2))
1600 CKSEC=VAL(MID$(CDSTIME$(STRACK),4,2))
1610 CKFLM=VAL(RIGHT$(CDSTIME$(STRACK),2))
1620 CKTOTAL=CKMIN*60+CKSEC+CKFLM/75:' ***** 指定トラック総合秒数 *****
1630 COLOR 5:LOCATE 0,3:PRINT USING "《 演奏位置 ### 分### 秒### フレーム 》";CDS%(2);CDS%(3);CDS%(4)
1640 COLOR 5:LOCATE 40,3:PRINT USING "### 曲目### 分### 秒目を検査中。";STRACK;ONMIN;ONSEC
1650 I$=INKEY$:IF I$=CHR$(27) THEN *ENST:'***** キャンセル(KEYBOAD)*****
1660 IF MOUSE(2,1)=-1 THEN *ENST:' ***** キャンセル( MOUSE )*****
1670 CD PLAY STRACK:' ***** 指定トラック検査開始 *****
1680 CDSTAT CDS%:DEDUCT=TIME:' ***** DEDUCT=検査開始時刻 *****
1690 COLOR 7:LOCATE 40,2:PRINT SPACE$(39)
1700 GOSUB *STIME
1710 GOSUB *CDVIEW
1720 *CHECK:'***** 繰り返し検査工程 *****
1730 ON ERROR GOTO 0
1740 GOSUB *PANEL
1750 I$=INKEY$:IF I$=CHR$(27) THEN *ENST:'***** キャンセル(KEYBOAD)*****
1760 IF MOUSE(2,1)=-1 THEN *ENST:' ***** キャンセル( MOUSE )*****
1770 ON ERROR GOTO *ERRLOOP
1780 ONMIN=CDS%(6):ONSEC=CDS%(7)
1790 CDSTAT CDS%:XMTIME=XTIME:XTIME=TIME:'***** CD演奏状態取得 *****
1800 IF XTIME<XMTIME THEN XTIME=XTIME+3600*24:'***** 日替わり調整 *****
1810 IF CDS%(1)=0 THEN *ENST:' ***** 指定トラック検査終了 *****
1820 CKMIN=CDS%(2):CKSEC=CDS%(3):CKFLM=CDS%(4)
1830 IF CKMIN*60+CKSEC+CKFLM/75<CKTOTAL THEN CKTOTAL=-ABS(CKTOTAL):'ERROR 53
1840 IF MTIME<CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!) THEN
1850 MTIME=CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)
1860 ELSE
1870 IF CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)<MTIME THEN
1880 GOTO *RET
1890 ELSE
1900 MTIME=MTIME+XTIME-XMTIME
1910 GOTO *RET
1920 ENDIF
1930 ENDIF
1940 IF XTIME<DEDUCT+CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)-1 OR DEDUCT+CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)+1<XTIME THEN ERROR 53
1950 *RET:'PRINT USING"XT:#### XMT:#### MT:#### CK:#### ";XTIME-DEDUCT;XMTIME-DEDUCT;MTIME;CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!):'***CK POINT***
1960 CKTOTAL=CKMIN*60+CKSEC+CKFLM/75
1970 COLOR 5:LOCATE 0,3:PRINT USING "《 演奏位置 ### 分### 秒### フレーム 》";CDS%(2);CDS%(3);CDS%(4)
1980 IF PONMIN=ONMIN AND PONSEC=ONSEC THEN *CHECK
1990 COLOR 13:LOCATE 40,3:PRINT USING "### 曲目### 分### 秒目を検査中。";CDS%(5);ONMIN;ONSEC
2000 PONMIN=ONMIN:PONSEC=ONSEC
2010 GOTO *CHECK
2020 *ENST:'***** 指定トラック検査終了 *****
2030 STRACK=STRACK+1
2040 IF STRACK<=CDI%(5) THEN
2050 GOTO *ERSTART
2060 ELSE
2070 STRACK=CDI%(5)
2080 ENDIF
2090 COLOR 5:LOCATE 40,2:PRINT " お疲れさま! 検査は終了しました。 "
2100 LOCATE 0,3:PRINT SPACE$(79)
2110 CDS%(5)=0:GOSUB *STIME:GOSUB *CDVIEW
2120 RETURN
2130 *CDVIEW:'***** CD表面イメージ表示 *****
2140 DVX=439:DVY=300:PKMIN=64
2150 VTMIN=TOTALFLM/74/60
2160 IF 1<VTMIN/PKMIN THEN VTMIN=PKMIN
2170 VFLM=INT(((145^2-70^2)*VTMIN/PKMIN+70^2)^.5!)
2180 CIRCLE (DVX,DVY),157,%1
2190 CIRCLE (DVX,DVY),155,%1,,,,F
2200 CIRCLE (DVX,DVY),148,%2,,,,F
2210 CIRCLE (DVX,DVY),VFLM,%3,,,,F
2220 GOSUB *CDCKVIEW
2230 CIRCLE (DVX,DVY),69,%2,,,,F
2240 *CDVIEW2
2250 CIRCLE (DVX,DVY),63,%1,,,,F
2260 CIRCLE (DVX,DVY),55,%0,,,,F,PRESET
2270 CIRCLE (DVX,DVY),52,%1
2280 CIRCLE (DVX,DVY),48,%1
2290 CIRCLE (DVX,DVY),35,%1
2300 CIRCLE (DVX,DVY),22,%1
2310 CIRCLE (DVX,DVY),20,%1
2320 RETURN
2330 *CDCKVIEW:'***** CDチェック箇所イメージ表示 *****
2340 FOR CDV=CDI%(5) TO 1 STEP -1
2350 VLFLM=INT(((145^2-70^2)*DVSTFLM(CDV)/74/60/PKMIN+70^2)^.5!*VFLM/((145^2-70^2)*TOTALFLM/74/60/PKMIN+70^2)^.5!+.5!)
2360 IF ETRCOLOR(CDV)=3 THEN CIRCLE (DVX,DVY),VLFLM,%7,,,,F:GOTO *CDCKJP1
2370 IF ETRCOLOR(CDV)=1 AND CDV=INT(CDV/2)*2 THEN CIRCLE (DVX,DVY),VLFLM,%4,,,,F:GOTO *CDCKJP1
2380 IF ETRCOLOR(CDV)=1 AND CDV<>INT(CDV/2)*2 THEN CIRCLE (DVX,DVY),VLFLM,%5,,,,F:GOTO *CDCKJP1
2390 IF CDV=CDS%(5) THEN CIRCLE (DVX,DVY),VLFLM,%8,,,,F:GOTO *CDCKJP1
2400 IF CDV=INT(CDV/2)*2 THEN
2410 CIRCLE (DVX,DVY),VLFLM,%6,,,,F
2420 ELSE
2430 CIRCLE (DVX,DVY),VLFLM,%3,,,,F
2440 ENDIF
2450 *CDCKJP1
2460 NEXT CDV
2470 RETURN
2480 *ERRLOOP:'***** エラー処理ルーチン *****
2490 IF EP=1 THEN *ERRLOOP2
2500 COLOR 2
2510 IF LPRN=1 THEN ELPRN=1:LOCATE 40,2:COLOR 10:PRINT " 《 印刷機能は停止しています。》":RESUME NEXT
2520 LOCATE 40,2:PRINT USING "### 曲目### 分### 秒目付近が再生不能。";STRACK;ONMIN;ONSEC
2530 OUT &H04C0,&HC7:OUT &H04C0,&H03
2540 IF CDI%(5)<STRACK THEN STRACK=CDI%(5):RESUME *ENST
2550 IF ELPRN=0 THEN LPRINT USING "###曲目###分###秒目(Total###分###秒目)付近が再生不能です。";STRACK;ONMIN;ONSEC;CKMIN;CKSEC
2560 IF CDS%(5)=CDI%(5) THEN
2570 ETRCOLOR(CDI%(5))=1:GOSUB *STIME:RESUME *ENST
2580 ELSE
2590 ETRCOLOR(STRACK)=1:STRACK=STRACK+1:CDS%(5)=STRACK:CKMIN=CDS%(2)
2600 CKSEC=CDS%(3):CKFLM=CDS%(4)
2610 ENDIF
2620 GOSUB *STIME:RESUME *ERSTART
2630 *ERRLOOP2:'***** CD未挿入 *****
2640 COLOR 10
2650 LOCATE 24,12:PRINT " 《 CDをセットしてください 》 "
2660 C=0
2670 *ERRLP21
2680 GOSUB *PANEL
2690 I$=INKEY$
2700 IF 2000<C OR I$<>"" OR MOUSE(2,1)=-1 THEN *ERRLP22
2710 C=C+1
2720 GOTO *ERRLP21
2730 *ERRLP22
2740 COLOR 0
2750 LOCATE 24,12:PRINT " "
2760 START=0:EP=0
2770 RESUME *MAIN